#include <bits/stdc++.h>

using namespace std;
int visited[21],n,ans;
string str[21];
string cha;

// 搜索两个单词之间重复的部分，返回重复的长度，没有重复，则返回0
int check(string a,string b) {
    int a_len = a.length();
    int b_len = b.length();
    int min_len = min(a_len,b_len);
    for(int i = 1;i < min_len;i++) {
        int flag = 1;
        for(int j = 0;j<i;j++) {
            if(a[a_len-i+j] != b[j]) flag = 0;
        }
        if (flag) return i;
    }
    return 0;
}

void dfs(string s, const int len) {
    ans = max(len,ans);

    // 让当前的单词和每一个单词进行比较
    for(int i = 1;i <= n;i++) {

        // 如果发现当前单词已经被使用过两次，则直接退出
        if(visited[i] >= 2) continue;
        // 查看当前遍历的单词和传递的单词有多少重复的部分
        int c = check(s,str[i]);

        // 如果有重复，则说明可以接龙，则继续搜索
        if (c > 0) {
            visited[i]++;
            dfs(str[i],len+str[i].length()-c);
            visited[i]--;
        }
    }

}

int main() {
    cin >> n;
    for(int i = 1;i <= n;i++) {
        cin >> str[i];
    }
    cin >> cha;
    dfs(' '+cha,1);
    cout << ans << endl;
    return 0;
}